'''
首先通过python提供的第三方库xlrd对象完成excel表格的读取操作。  xlrd （excel  read）
'''

#1. 通过import xlrd将安装的第三方库xlrd对象引入该文件
import xlrd;
from xlutils.copy import copy

'''
方法: 该方法的作用是将传入该方法中的excel文件中的用例信息中的接口信息拼接好后存入列表中返回

参数: file_url 用例文件的路径    file_sheet 用例文件的sheet名称

返回值: 接口列表
'''
def readCaseToInetr(file_url,file_sheet):

    #2. 通过调用xlrd对象的open_workbook方法读取指定的excel表格文件
    case_file = xlrd.open_workbook(file_url)

    #3. 通过读取到的文件获取相应要操作的sheet表格
    # sheet_by_name 通过传入方法的sheet名称获取指定的sheet表格
    # sheet_by_index 通过传入方法的sheet下标获取指定的sheet表格
    sheet_data = case_file.sheet_by_name(file_sheet)

    #4. 通过获取到的sheet表格对象的nrows属性获取当前sheet表格中的数据条数
    case_num = sheet_data.nrows

    #定义一个列表用于存储拼接好的接口信息
    inter_list = [];

    #5. 通过for循环一条条获取用例信息
    for i in range(1,case_num):
        print("--------------------------")
        #定义一个字典，用于进行接口信息的存储
        inter_info = {};
        #sheet_data.row(i) = [text:'LOL-lol-003', text:'获取单人物', text:'http://127.0.0.1:8080/lol/servlet/lol', text:'get', text:'{"method":"findYxObj","id":"1"}', text:'{"上单":"小虎","age":"22","战队":"RNG"}', empty:'', empty:'']

        inter_info["inter_name"] = sheet_data.row(i)[2].value;
        inter_info["inter_url"] = sheet_data.row(i)[3].value;
        inter_info["inter_method"] = sheet_data.row(i)[4].value;
        inter_info["inter_params"] = sheet_data.row(i)[5].value;
        inter_info["inter_think"] = sheet_data.row(i)[6].value;

        inter_list.append(inter_info)

    #6. for循环执行完毕后，将接口列表返回
    return inter_list;

'''
方法: 该方法的作用是将传入该方法中的内容写入到指定的文件中。

参数: 要操作的文件的路径     写入的信息

返回值: 无
'''
def writeCaseResult(casefile,sheet_name,resp_test_list,panding_list):

    # 1. 首先将要写入的文件进行读取
    case_file = xlrd.open_workbook(casefile);

    # 2. 调用xlutils对象的copy方法对要写入的文件进行拷贝，后期操作的文件是拷贝后的文件
    new_case_file = copy(case_file)

    # 3. 通过拷贝文件的get_sheet()方法获取要操作的sheet
    sheet_content = new_case_file.get_sheet(sheet_name);

    # 4. 通过sheet对象的write方法将内容按照行和列写入指定的单元格中  (行,列,内容)
    for i in range(len(resp_test_list)):
        sheet_content.write(i + 1, 7, resp_test_list[i]);
        sheet_content.write(i + 1, 8, panding_list[i]);

    # 5. 通过调用拷贝文件的save方法将修改后的内容写入到指定的文件中
    new_case_file.save(casefile)


'''
方法: 该方法的作用是将传入该方法中的所有sheet名称返回。
参数: 用例文件的路径
返回值: 该用例文件所有的sheet页。  列表
'''
def get_casefile_sheets(file_url):

    # 定义一个列表用于存储用例文件的名称
    case_sheet_name_list = []

    # 1. 通过调用xlrd对象的open_workbook方法读取指定的excel表格文件
    case_file = xlrd.open_workbook(file_url);

    # 2. 获取该文件的所有sheet名称
    for i in case_file.sheets():

        case_sheet_name_list.append(i.name)

    return case_sheet_name_list;
